static char *encoded_points = NULL;
static char *encoded_levels = NULL;
+static char *script = NULL;
FILE *fd;
}
#else
-static xg_callback goog_points, goog_levels, goog_poly_e;
+static xg_callback goog_points, goog_levels, goog_poly_e, goog_script;
static
xg_tag_mapping google_map[] = {
{ goog_points, cb_cdata, "/page/directions/polyline/points" },
{ goog_levels, cb_cdata, "/page/directions/polyline/levels" },
{ goog_poly_e, cb_end, "/page/directions/polyline" },
+ { goog_script, cb_cdata, "/html/head/script" },
{ NULL, 0, NULL }
};
+void goog_script( const char *args, const char **unused )
+{
+ if (args)
+ {
+ if ( script )
+ {
+ script = xstrappend( script, args );
+ }
+ else
+ {
+ script = xstrdup( args );
+ }
+ }
+}
+
void goog_points( const char *args, const char **unused )
{
if (args)
google_read(void)
{
xml_read();
+ if ( script )
+ {
+ char *xml = strchr( script, '\'' );
+ char *end = NULL;
+ if ( xml ) {
+ xml++;
+ end = strrchr( xml, '\'' );
+ if ( end ) {
+ *end = '\0';
+ xml_deinit();
+ xml_init( NULL, google_map );
+ xml_readstring( xml );
+ }
+ }
+ xfree( script );
+ }
}
#endif
--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><title>Google Maps - 233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</title><script type="text/javascript">//<![CDATA[
+function vpage_load() {if (window.parent && window.parent._load) {window.parent._load('<?xml version="1.0"?><page><title>233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</title><query>233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</query><center lat="41.913070" lng="-87.644435"/><span lat="0.068240" lng="0.023910"/><directions><source><address><line>233 S Upper Wacker Dr</line><line>Chicago, IL 60606</line></address></source><destination><address><line>1060 W Addison St</line><line>Chicago, IL 60613</line></address></destination><polyline numLevels="4" zoomFactor="32"><points>mnr~F`p{uOy@@Y?]@}EH}B@gCD??W?eBBwA@a@A{BDeCBuBDY?m@?_AG??QGWWcD_G?S?eB?eD?aH??e@A[?kC???uGJaD?{CDcDDkA@sABcD@}CBaD@_DBkEBgGBcGH}FHcGHaGBwCBwJNgKHaHFoKF??gHFo@A??SKOQMa@??cCnAqE~BuCxAcExBoJxE??}A`A{FbDgJnEeJrEuFxCuBdAsFtCe@VaAf@_Bp@sCxAYLkDfBWVe@l@Yn@oC|A_CfAaB|@w@`@cAXeAF??uDfCgDlCs@l@mClBQLaDdCyGbF}@p@??wDpCqDvCmJxGcCfB}EzDyCxB??[ReFrD_EbD_C|A??AkD</points><levels>B?????BB??????@??BB?@@???BB??BB?????@?????@?????@??BB?BB?@BB????@??@?@????@???@?@@@??@@A?@?????????@?@@?????BBB</levels></polyline><segments meters="8443" seconds="543" distance="5.2 mi" time="9 mins"><segment id="seg0" pointIndex="0" meters="332" seconds="21" distance="0.2 mi" time="21 secs">Head <b>north</b> from <b>S Upper Wacker Dr</b></segment><segment id="seg1" pointIndex="7" meters="422" seconds="27" distance="0.3 mi" time="27 secs">Continue on <b>N Upper Wacker Dr</b></segment><segment id="seg2" pointIndex="18" meters="406" seconds="26" distance="0.3 mi" time="26 secs">Bear <b>right</b> at <b>W Upper Wacker Dr</b></segment><segment id="seg3" pointIndex="26" meters="114" seconds="7" distance="0.1 mi" time="7 secs">Turn <b>left</b> at <b>N La Salle St</b></segment><segment id="seg4" pointIndex="30" meters="2597" seconds="167" distance="1.6 mi" time="2 mins">Continue on <b>N La Salle Blvd</b></segment><segment id="seg5" pointIndex="52" meters="191" seconds="12" distance="0.1 mi" time="12 secs">Continue on <b>N La Salle Dr</b></segment><segment id="seg6" pointIndex="55" meters="40" seconds="3" distance="0.0 mi" time="2 secs">Bear <b>right</b> at <b>W Eugenie St</b></segment><segment id="seg7" pointIndex="59" meters="4269" seconds="274" distance="2.7 mi" time="4 mins">Turn <b>left</b> at <b>N Clark St</b></segment><segment id="seg8" pointIndex="109" meters="71" seconds="5" distance="0.0 mi" time="4 secs">Turn <b>right</b> at <b>W Addison St</b></segment></segments></directions></page>', window.document);}}//]]></script></head><body onload="vpage_load()"><input id="zoom" type="text" value=""/><input id="centerlat" type="text" value=""/><input id="centerlng" type="text" value=""/></body></html>
\ No newline at end of file
--- /dev/null
+
+FROM="233 S. Wacker, Chicago, IL"
+TO="1060 W. Addison, Chicago, IL"
+wget -O - "http://maps.google.com/maps?q=$FROM to $TO&output=js" 2>/dev/null
+
${PNAME} -i google -f reference/google.xml -o arc -F ${TMPDIR}/google.out
compare ${TMPDIR}/google.out reference/google.arc
+rm -f ${TMPDIR}/google.out
+${PNAME} -i google -f reference/google.js -o arc -F ${TMPDIR}/google.out
+compare ${TMPDIR}/google.out reference/google.arc
+
#
# XCSV "human readable" tests
#
}
+void xml_readstring( char *str )
+{
+ int len = strlen(str);
+ if (!XML_Parse(psr, str, len, 1)) {
+ fatal( MYNAME ":Parse error at %d: %s\n",
+ XML_GetCurrentLineNumber(psr),
+ XML_ErrorString(XML_GetErrorCode(psr)));
+ }
+ XML_ParserFree(psr);
+}
+
void
xml_init(const char *fname, xg_tag_mapping *tbl)
{
- ifd = xfopen(fname, "r", MYNAME);
+ if (fname) {
+ ifd = xfopen(fname, "r", MYNAME);
+ }
current_tag = vmem_alloc(1,0);
*((char *)current_tag.mem) = '\0';
void xml_init(const char *fname, xg_tag_mapping *tbl);
void xml_read(void);
+void xml_readstring(char *str);
void xml_deinit(void);